/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Problemas;



/**
 *
 * @author Jaime
 */
public class Arista {
    private int[][] coste;
    private Problema[][] problema;
    private boolean[][] adyacente;
    //int f,c;
    int numPlanetas;

    public Arista(int n){
      //  asignaProblemas(filas,columnas);
        numPlanetas=n+1;
        adyacente=new boolean[numPlanetas][numPlanetas];
        coste=new int[numPlanetas][numPlanetas];
        problema=new Problema[numPlanetas][numPlanetas];
        adyacencia();
        asignaCosteProblemas();
        
                //asignaCosteProblemas();
     }

    public void adyacencia(){
        for (int i=1; i< numPlanetas; i++){
            if (i%19==1){
                if(i==1){
                    derecha(i);
                    abajo(i);
                }else if (i==229){
                    arriba(i);
                    derecha(i);
                
                } else{
                    arriba(i);
                    abajo(i);
                    derecha(i);
                }    
            }else if (i%19==0){
                if(i==19){
                    izquierda(i);
                    abajo(i);
                }else if (i==247){
                    arriba(i);
                    izquierda(i);
                
                } else{
                    arriba(i);
                    abajo(i);
                    izquierda(i);
                }
            }else if (i<=19){
                if(i==19){
                    izquierda(i);
                    abajo(i);
                }else if (i==1){
                    abajo(i);
                    izquierda(i);

                } else{
                    derecha(i);
                    abajo(i);
                    izquierda(i);
                }
            }else if (i>=229 && i<=247){
                if(i==229){
                    derecha(i);
                    arriba(i);
                }else if (i==247){
                    arriba(i);
                    izquierda(i);

                } else{
                    derecha(i);
                    arriba(i);
                    izquierda(i);
                }
            }else{
                arriba(i);
                abajo(i);
                derecha(i);
                izquierda(i);
            }


        }
    }

    public void derecha(int i){
            adyacente[i][i+1]=true;
    }
    public void izquierda(int i){
            adyacente[i][i-1]=true;
    }
    public void arriba(int i){
            adyacente[i][i-19]=true;
    }
    public void abajo (int i){
            adyacente[i][i+19]=true;
    }

        public void asignaCosteProblemas(){
       // Random r = new Random();
         //El coste se pone en función del problema
        for (int k=1;k<numPlanetas;k++){
            for (int x=1;x<numPlanetas;x++){
                 if (adyacente[k][x]){
                    if (problema[k][x]==null){
                        //para q alrededor del planeta no tnga los mismo problemas
                        int modulo=((3*(k))+(2*x))%12;
                        if (modulo == 0){
                                 problema[k][x] = new LoboColCabra();
                                 problema[x][k] = new LoboColCabra();
                                 coste[k][x]=160;
                                 coste[x][k]=coste[k][x];
                           }else if (modulo == 1){
                                   problema[k][x] = new Misioneros();
                                   problema[x][k] = new Misioneros();
                                   coste[k][x]=150;
                                   coste[x][k]=coste[k][x];
                           }else if (modulo == 2){
                                   problema[k][x] = new Garrafas();
                                   problema[x][k] = new Garrafas();
                                   coste[k][x]=145;
                                   coste[x][k]=coste[k][x];
                           }else if (modulo == 3){
                                   problema[k][x] = new Mono();
                                   problema[x][k] = new Mono();
                                   coste[k][x]=143;
                                   coste[x][k]=coste[k][x];
                           }else if (modulo == 4){
                                  problema[k][x] = new MundoBloques();
                                  problema[x][k] = new MundoBloques();
                                  coste[k][x]=123;
                                  coste[x][k]=coste[k][x];
                           }else if (modulo == 5){
                                   problema[k][x] = new Puzzle8();
                                   problema[x][k] = new Puzzle8();
                                   coste[k][x]=186;
                                   coste[x][k]=coste[k][x];
                           }else if (modulo == 6){
                                   problema[k][x] = new RelojesArena();
                                   problema[x][k] = new RelojesArena();
                                   coste[k][x]=180;
                                  coste[x][k]=coste[k][x];
                           }else if (modulo == 7){
                               problema[k][x] = new Rejilla();
                               problema[x][k] = new Rejilla();
                               coste[k][x]=217;
                               coste[x][k]=coste[k][x];
                           }else if (modulo == 8){
                                   problema[k][x] = new Laberinto();
                                   problema[x][k] = new Laberinto();
                                   coste[k][x]=185;
                                   coste[x][k]=coste[k][x];
                           }else if (modulo == 9){
                                   problema[k][x] = new Viajante();
                                   problema[x][k] = new Viajante();
                                   coste[k][x]=180;
                                   coste[x][k]=coste[k][x];
                           }else if (modulo == 10){
                                 problema[k][x] = new IntercambioTablero();
                                 problema[x][k] = new IntercambioTablero();
                                 coste[k][x]=200;
                                 coste[x][k]=coste[k][x];
                           }else if (modulo == 11){
                                 problema[k][x] = new Aspirador();
                                 problema[x][k] = new Aspirador();
                                 coste[k][x]=100;
                                 coste[x][k]=coste[k][x];
                           }
                    }
                    //genera el coste aletorio de 0 a 200;
                    /*coste[k][x]=100+r.nextInt(201);
                    coste[x][k]=coste[k][x];*/
                } else{
                    coste[x][x]=0;
                    problema[x][x]=null;
                }
            }
        }

    }

    public Problema dameProblema(int origen,int destino){
        return problema[origen][destino];
    }

    public int dameCoste(int origen, int destino){
        return coste[origen][destino];
    }

}
